package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/**
 * 调用Person类中所有被注释@AutoRunMethod标注的方法N次
 * 具体次数由注解参数value决定
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person"); //获取Person类对象
        Constructor c = cls.getConstructor(String.class); //获取Person类Strin参构造器
        Object obj = c.newInstance("张三"); //实例化Person对象
        Method[] methods = cls.getDeclaredMethods(); //获取所有方法
        for(Method method : methods){ //遍历所有方法
            if(method.isAnnotationPresent(AutoRunMethod.class)){ //被标注
                AutoRunMethod arm = method.getAnnotation(AutoRunMethod.class); //获取注解对象
                int value = arm.value(); //获取注解的value值
                System.out.println("调用方法:"+method.getName()+"()"+value+"次");
                for(int i=0;i<value;i++){ //循环value次
                    method.invoke(obj); //调用方法
                }
            }else{ //没有被标注
                System.out.println(method.getName()+"()没有被标注");
            }
        }
    }
}















